#ifndef xpack_math_random
#define xpack_math_random
#pragma push_macro("xuser")
#undef  xuser
#define xuser mixc::math_random::inc
#include"configure/platform.hpp"
#include"define/base_type.hpp"
#include"macro/xexport.hpp"
#include"macro/xinit.hpp"
#include"macro/xmodify.hpp"
#include"macro/xnew.hpp"
#include"utils/randomx.hpp"
#pragma pop_macro("xuser")

namespace mixc::math_random{
#if xuse_mixc_rtos
    inline inc::randomx g_random(0, 0);

    xinit(inc::the_main){
        xnew(xmodify(g_random)) inc::randomx();
    };
#else
    inline inc::randomx g_random;
#endif
}

namespace mixc::math_random{
    template<class type_t>
    inline type_t random(){
        return g_random.get<type_t>();
    }
}

#endif

xexport(mixc::math_random::random)